<?php 

class shoestringConstraints {

	public static function checkBeschikbaar($planningID, $aantal) {
		$shoestringDatabase = shoestringDatabaseObject::instantiateShoestring();
		$beschikbaar = $shoestringDatabase->getBeschikbaar($planningID);
		if($beschikbaar < $aantal) {
			throw new Exception("Er zijn helaas niet voldoende plaatsten meer beschikbaar voor deze reis. Het beschikbare aantal plaatsen is ".$beschikbaar.".");	
		}
	}
	
	public static function formatVoornaam($voornaam) {
		if(strlen($voornaam) == 0) {
			throw new Exception("Voornaam moet worden ingevuld");
		}
		return ucfirst($voornaam);
	}
	
	public static function formatPostcode($postcode) {
		if(strlen($postcode) == 0) {
			throw new Exception("Postcode moet worden ingevuld");
		}
		$postcode = strtoupper(str_replace(" ", "", $postcode));
		if(!preg_match("/^[1-9]+[0-9]{3}+[A-Z]{2}+$/", $postcode)) {
			throw new Exception("Ongeldige postcode");
		}
		return $postcode;	
	}

	private static function berekenLeeftijd($geboortedatum)
	{
		list($year,$month,$day) = explode("-",$geboortedatum);
		$year_diff  = date("Y") - $year;
		$month_diff = date("m") - $month;
		$day_diff   = date("d") - $day;
		if ($month_diff < 0) $year_diff--;
		elseif (($month_diff==0) && ($day_diff < 0)) $year_diff--;
		return $year_diff;
	}
	
	public static function checkGeboortedatum($datum, $maxleeftijd) {
		if(strlen($datum) == 0) {
			throw new Exception("Geboortedatum moet worden ingevuld");
		}
		if(!preg_match("/^[1-2]+[0,8-9]+[0-9]{2}+[\-]+[0-9]{2}+[\-]+[0-9]{2}+$/", $datum)) {
			throw new Exception("Ongeldige geboortedatum (formaat: jjjj-mm-dd)");
		}
		if($maxleeftijd!=null && $maxleeftijd!=0) {
			$leeftijd = shoestringConstraints::berekenLeeftijd($datum);
			if($leeftijd > $maxleeftijd) {
				throw new Exception("Deze deelnemer is te oud voor deze reis; de maximum leeftijd bedraagt $maxleeftijd jaar");
			}
		}
	}
	
	public static function checkBankrekening($rekening) {
		if(strlen($rekening) == 0) {
			throw new Exception("Bankrekeningnummer moet worden ingevuld");
		}
		if(!preg_match("/^[0-9]{9}+$/", $rekening)) {
			throw new Exception("Ongeldig bankrekeningnummer");
		}
	}
	
	public static function checkEmail($email) {
		if(strlen($email) == 0) {
			throw new Exception("Email moet worden ingevuld");
		}
		if (!preg_match("/^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/",$email)) {
			throw new Exception("Ongeldig emailadres");
		}
	}
}

?>